package com.fbinggun.fbinggunutil;

import com.fbinggun.fbinggunutil.API.JavaUtil;
import com.fbinggun.fbinggunutil.API.PApiUtil;
import com.fbinggun.fbinggunutil.utilclass.Variable;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin;

/**
 * 插件启动类 替代JavaPlugin
 */
public abstract class FPlugin extends JavaPlugin {


    /**
     * 重载方法
     */
    public abstract void reload();

    public void unListener(){
        HandlerList.unregisterAll(this);
        Bukkit.getScheduler().cancelTasks(this);
    }
    public abstract FPlugin getPlugin();

    /**
     * 获取语言文件
     * @param key 位置
     * @param player 玩家名
     * @param prefix 是否开启前缀
     * @param variable 本地变量
     * @return
     */
    public String getLang(String key, CommandSender player,boolean prefix,Variable... variable){
        String lang =getConfig().getString("Lang."+key);
        if(lang==null){
            lang= key;
        }
        if(prefix) {
            lang = getConfig().getString("Lang.Prefix", "") + lang;
        }
        if(player==null||!(player instanceof Player)){
            return JavaUtil.replaceColor(lang,variable);
        }

        return PApiUtil.setPlaceholders((OfflinePlayer) player,lang,variable);
    }

    /**
     * 获取汉化文本
     * @param key 位置
     * @return
     */
    public String getLang(String key){
        return getLang(key,null,true,null);
    }

    /**
     * 获取汉化文本
     * @param key 位置
     * @param player 玩家名
     * @return
     */
    public String getLang(String key,CommandSender player){
        return getLang(key,player,true,null);
    }

    /**
     * 获取汉化文本
     * @param key 位置
     * @param variables 本地变量
     * @return
     */
    public String getLang(String key,Variable... variables){
        return getLang(key,null,true,variables);
    }

    /**
     * 获取汉化文本
     * @param key 位置
     * @param prefix 是否开启前缀
     * @return
     */
    public String getLang(String key,boolean prefix){
        return getLang(key,null,prefix,null);
    }

    /**
     * 获取汉化文本
     * @param key
     * @param player
     * @param prefix 是否开启前缀
     * @return
     */
    public String getLang(String key, CommandSender player, boolean prefix){
        return getLang(key,player,prefix,null);
    }

    /**
     * 获取汉化文本
     * @param key 位置
     * @param prefix 是否开启前缀
     * @param variables 本地变量
     * @return
     */
    public String getLang(String key,boolean prefix,Variable... variables){
        return getLang(key,null,prefix,variables);
    }

    /**
     * 发送玩家消息
     * @param player
     * @param key
     */
    public void sendPlayerMsg(CommandSender player,String key){
        player.sendMessage(getLang(key,player,true,null));
    }
    public void sendPlayerMsg(CommandSender player,String key,boolean prefix,Variable... variables){
        player.sendMessage(getLang(key,player,prefix,variables));
    }
    public void sendPlayerMsg(CommandSender player,String key,boolean prefix){
        player.sendMessage(getLang(key,player,prefix));
    }
    public void sendPlayerMsg(CommandSender player,String key ,Variable... variables){
        player.sendMessage(getLang(key,player,true,variables));
    }


}
